package FileClass_etc.Exer;

import org.junit.Test;

import java.io.File;

/**
 * @author Jimmy Zhan WORKSTATION
 * @date 2023/3/28 16:45
 * 说明：遍历指定文件目录下的所有文件的名称，包括子文件目录中的文件 ---> 递归
 */

public class Exer_03 {
    @Test
    public void test1(){
        File file = new File("E:\\java-se\\Ep04_ObjectOrientedProgramming");
        printFileName(file);
    }
    public void printFileName(File file){
        if (file.isFile()){
            System.out.println(file.getName());
        } else if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File f: files){
                printFileName(f);
            }
        }
    }

    @Test
    public void testDelete() {
        File dir = new File("AnyPath");
        deleteDirectory(dir);
    }

    public void deleteDirectory(File file){
        // 如果file是文件，直接delete
        // 如果file是目录，先把它的下一级删除，然后删除自己
        if (file.isDirectory()){
            File[] all = file.listFiles();
            // 循环删除file的下一级
            for (File f: all){
                deleteDirectory(f);
            }
        }
        // 删除自己
        file.delete();
    }

    @Test
    public void testStore() {
        File dir = new File("AnyPath");
        getDirectorySize(dir);
    }

    public long getDirectorySize(File file){
        // file 是文件，那么直接返回 file.length()
        // file 是目录，把它的下一级的所有 file 大小加起来就是它的总大小
        long totalSize = 0;
        if (file.isFile()){
            totalSize += file.length();
        } else {
            File[] files = file.listFiles();
            for (File f: files) {
                getDirectorySize(f);
            }
        }
        return totalSize;
    }
}
